home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / REGISTER.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-03  |  3.0 KB  |  162 lines

  1. #include "global.h"
  2. #include "commands.h"
  3. #include "register.h"
  4.  
  5.  
  6. #if !defined(_lint)
  7. static char rcsid[] OPTIONAL = "$Id: register.c,v 1.11 1996/09/04 01:34:13 root Exp root $";
  8. #endif
  9.  
  10. static char *registration;
  11.  
  12. static int reg_valid (char *str);
  13. static char *reg_version (char *str);
  14. static char *reg_host (char *str);
  15. static void reg_info (void);
  16.  
  17.  
  18. int
  19. is_registered ()
  20. {
  21. int retval = 0;
  22.  
  23.     if (registration && reg_valid (registration))
  24.         retval = 1;
  25.     return (retval);
  26. }
  27.  
  28.  
  29. static int
  30. reg_valid (str)
  31. char *str;
  32. {
  33. char *cp;
  34. int val = 0;
  35.  
  36.     for (cp = str; *cp; cp++)    {
  37.         val += *cp;
  38.     }
  39.     return (!(val % 256));
  40. }
  41.  
  42. #define REG_VERS_OFFSET 1
  43. #define REG_HOST_OFFSET 20
  44.  
  45. static char *
  46. reg_version (str)
  47. char *str;
  48. {
  49. static char vers[5];
  50.  
  51.     if (!reg_valid (str) || (strlen (str) < REG_VERS_OFFSET + 4))
  52.         strcpy (vers, "???");
  53.     else
  54.         sprintf (vers, "%c.%c%c", str[REG_VERS_OFFSET] - '#' + '0',
  55.             str[REG_VERS_OFFSET + 1] - '#' + '0',
  56.             str[REG_VERS_OFFSET + 2] - '#' + '0');
  57.     return vers;
  58. }
  59.  
  60.  
  61. static char *
  62. reg_host (str)
  63. char *str;
  64. {
  65. static char host[32], *cp;
  66. int k, len;
  67.  
  68.     if (!reg_valid (str) || (strlen (str) < REG_HOST_OFFSET))
  69.         strcpy (host, "unknown host");
  70.     else {
  71.         len = str[REG_HOST_OFFSET] - 'a';
  72.         if ((int)strlen (str) < (REG_HOST_OFFSET + len + 1))
  73.             strcpy (host, "unknown host");
  74.         else {
  75.             for (k = 0,cp = host; k < len; k++, cp++)
  76.                 *cp = str[REG_HOST_OFFSET + 1 + k] - 1;
  77.             *cp = 0;
  78.         }
  79.     }
  80.     return host;
  81. }
  82.  
  83.  
  84.  
  85. static void
  86. reg_info ()
  87. {
  88.     tprintf ("copy of TNOS registered to %s since release %s\n",
  89.         reg_host (registration),
  90.         reg_version (registration));
  91. }
  92.  
  93. void
  94. reg_status ()
  95. {
  96.     if (!registration)
  97.         registration = strdup (REGISTRATION);
  98.  
  99.     if (!strcmp (registration, "unregistered"))    {
  100.         tputs ("*** Running an unregistered copy of TNOS "VERSION"\n");
  101.     } else {
  102.         if (!reg_valid (registration))
  103.             tputs ("*** Running invalid ");
  104.         else
  105.             tputs ("*** This ");
  106.         reg_info ();
  107.     }
  108. }
  109.  
  110.  
  111. int
  112. doregister (argc, argv, p)
  113. int argc;
  114. char *argv[];
  115. void *p OPTIONAL;
  116. {
  117.     if (argc == 1)    {    /* viewing registration info */
  118.         if (!registration)
  119.             registration = strdup (REGISTRATION);
  120.         tprintf ("Registration: %s\n", registration);
  121.         if (strcmp (registration, "unregistered"))    {
  122.             tputs ("This ");
  123.             reg_info ();
  124.         }
  125.     } else             /* setting registartion info */
  126.         registration = strdup (argv[1]);
  127.     return 0;
  128. }
  129.  
  130.  
  131. int
  132. doregistry (argc, argv, p)
  133. int argc OPTIONAL;
  134. char *argv[] OPTIONAL;
  135. void *p OPTIONAL;
  136. {
  137.     if (!registration)
  138.         registration = strdup (REGISTRATION);
  139.     tputs ("This ");
  140.     if (strcmp (registration, "unregistered"))
  141.         reg_info ();
  142.     else
  143.         tputs ("copy of TNOS is unregistered\n");
  144.     return 0;
  145. }
  146.  
  147.  
  148. #ifdef TEST
  149. void
  150. main (argc, argv)
  151. int argc;
  152. char *argv[];
  153. {
  154.     if (argc != 2)
  155.         exit (1);
  156.     printf ("Registration valid = %d\n", reg_valid (argv[1]));
  157.     printf ("Registered release = %s\n", reg_version (argv[1]));
  158.     printf ("Registered hostname = %s\n", reg_host (argv[1]));
  159. }
  160.  
  161. #endif /* TEST */
  162.